package cn.kgc.crowdfundingadmin2.controller;


import cn.kgc.crowdfundingadmin2.common.CrowdFundingConstant;
import cn.kgc.crowdfundingadmin2.common.ResultEntity;
import cn.kgc.crowdfundingadmin2.pojo.Admin;
import cn.kgc.crowdfundingadmin2.service.AdminService;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.util.List;

/**
 * @author shkstart
 * @create 郭祥伟
 */
@Controller
public class    AdminController {
    @Resource
    AdminService adminService;

    @RequestMapping("/admin/do/login")
    public String doLogin(String loginAcct, String userPswd, HttpSession session, Model model) {
        Admin admin = adminService.login(loginAcct, userPswd);
        if (admin != null) {
            session.setAttribute(CrowdFundingConstant.ATTR_NAME_LOGIN_ADMIN, admin);
            return "redirect:/admin/to/main/page.html";

        } else {
            model.addAttribute(CrowdFundingConstant.ATTR_NAME_MESSAGE, CrowdFundingConstant.MESSAGE_LOGIN_FAILED);
            return "admin-login";

        }
    }

    //局部异常处理
    @ExceptionHandler(value = Exception.class)
    public String catchException(Exception exception, Model model) {
        model.addAttribute(CrowdFundingConstant.ATTR_NAME_ERROR_MESSAGE, exception);
        return "system-error";
    }


    @RequestMapping("/admin/query/for/search")
//       @PreAuthorize(value="hasAnyAuthority('user:get')")
//       @PreAuthorize(value = "hasAuthority('user:get')")
//       @PreAuthorize(value ="hasRole('超级管理员')")
//       @PreAuthorize(value = "hasAnyRole('超级管理员','董事长')")
    public String queryForSearch(

            // 如果页面上没有提供对应的请求参数，那么可以使用defaultValue指定默认值
            @RequestParam(value = "pageNum", required = false, defaultValue = "1") Integer pageNum,
            @RequestParam(value = "pageSize", defaultValue = "5", required = false) Integer pageSize,
            @RequestParam(value = "keyword", defaultValue = "", required = false) String keyword,
            Model model) {

        PageInfo<Admin> pageInfo = adminService.queryForKeywordSearch(pageNum, pageSize, keyword);
        model.addAttribute(CrowdFundingConstant.ATTR_NAME_PAGE_INFO, pageInfo);
        System.out.println(pageInfo.toString());
        return "admin-page";
    }

    @RequestMapping("/admin/logout")
    public String logout(HttpSession session) {
        session.invalidate();
        return "redirect:/index";
    }

    //删除
    @RequestMapping("/admin/batch/remove")
    @ResponseBody
    public ResultEntity<String> batchRemove(@RequestBody List<Integer> adminIdList) {
        adminService.remove(adminIdList);
        return ResultEntity.successWithoutData();
    }


    //添加用户
    @RequestMapping("/admin/save")
    public String saveAdmin(Admin admin) {
        adminService.saveAdmin(admin);
        return "redirect:/admin/query/for/search";
    }

    /**
     * 获取用户信息，跳转修改页面
     */
    @RequestMapping("/admin/to/edit/page")
    public String toEditPage(@RequestParam("adminId") Integer adminId, Model model) {

        Admin admin = adminService.getAdminById(adminId);

        model.addAttribute(CrowdFundingConstant.ATTR_ADMIN, admin);

        return "admin-edit";
    }

    /**
     * 修改
     */
    @RequestMapping("/admin/update")
    public String updateAdmin(Admin admin, Integer pageNum) {
        try {
            adminService.updateAdmin(admin);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "redirect:/admin/query/for/search?pageNum=" + pageNum;
    }

    @RequestMapping("/403")
    public String noAuth() {
        return "error403";
    }
}
